package com.ctshk.rpc.goods.service;

import cn.hutool.json.JSONObject;
import com.ctshk.common.model.PageResponse;
import com.ctshk.common.model.TokenUser;
import com.ctshk.rpc.goods.dto.CommodityClassificationAllLevelListDTO;
import com.ctshk.rpc.goods.dto.CommodityClassificationDTO;
import com.ctshk.rpc.goods.req.CommodityClassificationAddReq;
import com.ctshk.rpc.goods.req.CommodityClassificationPageReq;

import java.time.LocalDateTime;
import java.util.List;

/**
 * <p>
 * 商品分类 服务类
 * </p>
 *
 * @author 姜斌文
 * @since 2021-04-08
 */
public interface ICommodityClassificationService {

	/**
	 * 新增商品分类
	 * @param addReq 商品分类入参对象
	 * @param userId 用户ID
	 * @throws Exception 異常
	 */
	void addCommodityClassification(CommodityClassificationAddReq addReq, Long userId) throws Exception;
	
	/**
	 * 编辑商品分类
	 * @param addReq 更新商品分类入参对象
	 * @param userId 用户ID
	 * @throws Exception  異常
	 */
	void updateCommodityClassification(CommodityClassificationAddReq addReq, Long userId) throws Exception;
	
	/**
     * 商品分类管理列表查询
     * @param pageReq  分页条件入参
     * @param tokenUser  登录用户
     * @return 商品分类管理分页列表
     */
    PageResponse<CommodityClassificationDTO> findCommodityClassification(CommodityClassificationPageReq pageReq, TokenUser tokenUser);

    /**
     * 查询一级分类名称列表
     * @return 一级分类名称列表集合
     */
    List<CommodityClassificationDTO> findClassificationNameList(Long menuId, TokenUser tokenUser);

	/**
	 * 查询一级以及子分类名称列表
	 * @return 父子级分类名称集合列表
	 */
	List<CommodityClassificationAllLevelListDTO> findClassificationByAllLevel(LocalDateTime now, Long menuId, TokenUser tokenUser);

	/**
	 * 更新分类状态
	 * @param req 分类信息
	 * @return
	 */
	Boolean updateClassfincationStatus(CommodityClassificationAddReq req);

	/**
	 * 查询所有分类
	 * @return
	 */
	List<JSONObject> findCommodityClassficationListAll(Long menuId, TokenUser tokenUser);

}
